home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf
/
ASo-Tools
/
Sources
/
Dir.asm
< prev
next >
Wrap
Assembly Source File
|
1993-07-11
|
16KB
|
953 lines
;mit DOBJ gewonnenes Listing von 'Dir'
;anschließend per Hand optimiert und dahingehend geändert, daß das H-Flag
;respektiert wird
NOLIST
INCLUDE "exec/LVO.i"
INCLUDE "exec/execbase.i"
INCLUDE "exec/tasks.i"
INCLUDE "exec/memory.i"
INCLUDE "dos/LVO.i"
INCLUDE "dos/dos.i"
INCLUDE "dos/dosasl.i"
INCLUDE "dos/dosextens.i"
LIST
SECTION only,CODE
main: LINK.W A5,#-776
MOVEM.L D2-D3/A2-A3/A6,-(sp)
MOVEA.W #_AbsExecBase,A0
MOVEA.L (A0),A3
MOVEA.L A3,A0
MOVE.L A0,24(sp)
MOVE.W #749,D0
MOVEQ #0,D1
LEA.L -758(A5),A1
1$: MOVE.B D1,(A1)+
dbf D0,1$
MOVE.L A3,-758(A5)
MOVEQ #RETURN_FAIL,D0
MOVE.L D0,-460(A5)
MOVE.L D1,-464(A5)
LEA.L DosName(pc),A1
MOVEQ #36,D0
MOVEA.L A3,A6
CALL OpenLibrary
MOVE.L D0,A2
MOVE.L D0,-754(A5)
beq EndNoDos
MOVE.L #$0800,D0
MOVE.L #MEMF_CLEAR|MEMF_PUBLIC,D1
CALL AllocVec
MOVE.L D0,-432(A5)
bne 2$
MOVEA.L A2,A6
CALL IoErr
MOVE.L D0,-464(A5)
bra EndNoMem
2$: LEA.L Template(pc),A0
MOVE.L A0,D1
LEA.L -456(A5),A1
MOVE.L A1,D2
MOVEQ #0,D3
MOVEA.L A2,A6
CALL ReadArgs
MOVE.L D0,20(sp)
bne 3$
CALL IoErr
MOVE.L D0,-464(A5)
bra EndBadArgs
3$: MOVE.L -452(A5),D1
beq EvaluateOptions
MOVEA.L D1,A3
bra NextOpt
ParseOpts:
moveq #1,d1
MOVE.B (A3)+,D0
SUBI.b #'A',D0 ;'A' ?
beq 3$
SUBQ.b #3,D0 ;'D' ?
beq 4$
SUBQ.b #2,D0 ;'F' ?
beq 5$
SUBQ.b #3,D0 ;'I' ?
beq 6$
SUBI.b #24,D0 ;'a' ?
beq 3$
SUBQ.b #3,D0 ;'d' ?
beq 4$
SUBQ.b #2,D0 ;'f' ?
beq 5$
SUBQ.b #3,D0 ;'i' ?
bne 7$
6$: MOVE.L D1,-436(A5)
bra NextOpt
3$: MOVE.L D1,-448(A5)
bra NextOpt
4$: MOVE.L D1,-444(A5)
bra NextOpt
5$: MOVE.L D1,-440(A5)
bra NextOpt
7$: MOVEA.L A2,A6
CALL Output
MOVEQ #0,D1
MOVE.B -1(A3),D1
MOVE.L D1,32(sp)
move.l d1,d2
MOVE.L D0,D1
CALL FPutC
LEA.L IgnoreOptTxt(pc),A0
MOVE.L A0,D1
CALL PutStr
NextOpt:
TST.B (A3)
bne ParseOpts
EvaluateOptions:
lea -465(a5),a0
TST.L -448(A5)
beq 1$
BSET.B #0,(a0)
1$: TST.L -436(A5)
beq 2$
BSET.B #3,(a0)
2$: MOVE.L -440(A5),D0
beq 3$
BSET.B #2,(a0)
3$: MOVE.L -444(A5),D1
beq 4$
BSET.B #1,(a0)
4$: or.l d1,d0
bne 5$
OR.B #6,(a0)
5$: MOVE.L #$1000,-742(A5)
MOVE.B #1,-734(A5)
TST.L -456(A5)
bne 6$
LEA.L L11(pc),A0
MOVE.L A0,-456(A5)
6$: MOVEA.L -456(A5),A0
MOVE.L A0,D1
LEA.L -750(A5),A1
MOVE.L A1,D2
MOVEA.L A2,A6
CALL MatchFirst
TST.L D0
beq L9
CALL IoErr
MOVE.L D0,-464(A5)
CMPI.L #ERROR_BREAK,D0
beq L10
MOVE.B -734(A5),D0
BTST.L #1,D0
bne L10
LEA.L NoInfoTxt(pc),A0
MOVE.L A0,D1
LEA.L -456(A5),A1
MOVE.L A1,D2
CALL VPrintf
bra L10
L9: tst.l -726(A5)
bpl L12
btst.b #1,-734(a5)
bne L12
MOVE.L #ERROR_DIR_NOT_FOUND,-464(A5)
LEA.L NoDirTxt(pc),A1
MOVE.L A1,D1
LEA.L -456(A5),A0
MOVE.L A0,D2
CALL VPrintf
bra L10
L12: bclr.b #3,-734(a5)
MOVEQ #0,D0
LEA.L -758(A5),A0
move.l d0,a1
bsr DoDir
L10: LEA.L -750(A5),A0
MOVE.L A0,D1
MOVEA.L A2,A6
CALL MatchEnd
MOVE.L 20(sp),D1
CALL FreeArgs
EndBadArgs:
MOVEA.L 24(sp),A3
MOVEA.L -432(A5),A1
MOVEA.L A3,A6
CALL FreeVec
EndNoMem:
MOVE.L -464(A5),D1
beq 2$
CMPI.L #ERROR_BREAK,D1
beq 1$
MOVEA.L A2,A6
CALL SetIoErr
1$: MOVE.L -464(A5),D1
MOVEQ #ERROR_NO_MORE_ENTRIES/2,D0
ADD.L D0,D0
CMP.L D1,D0
beq 2$
MOVEQ #0,D2
MOVEA.L A2,A6
CALL PrintFault
2$: MOVEA.L A2,A1
MOVEA.L A3,A6
CALL CloseLibrary
bra Exit
EndNoDos:
move.l (a3),a1
MOVEA.L ThisTask(A1),A0
MOVEQ #ERROR_INVALID_RESIDENT_LIBRARY,D0
MOVE.L D0,pr_Result2(A0)
Exit: MOVE.L -460(A5),D0
MOVEM.L (sp)+,D2-D3/A2-A3/A6
UNLK A5
RTS
DoDir: LINK.W A5,#-36
MOVEM.L D2-D7/A2-A3/A6,-(sp)
MOVE.L D0,D7
MOVEA.L A1,A3
MOVE.L A0,-32(A5)
SUBA.L A0,A0
MOVE.L A0,-20(A5)
MOVE.L A0,D6
MOVEA.L -32(A5),A2
MOVEQ #20,D0
MOVE.L D0,298(A2)
MOVE.L A0,D5
MOVE.L A3,-28(A5)
BCLR.B #5,293(A2)
tst.l 32(A2) ;ap_Info+fib_DirEntryType+8
ble L16
TST.L D7
bne 1$
BTST.B #1,24(A2) ;ap_Flags+8
bne L16
1$: BSET.B #2,24(A2) ;ap_Flags+8
LEA.L 8(A2),A0
MOVE.L A0,D1
MOVEA.L 4(A2),A6
CALL MatchNext
MOVE.L D0,D5
L16: BTST.B #4,22(A2) ;ap_FoundBreak+2+8
beq 1$
MOVE.L #ERROR_BREAK,D5
MOVEQ #64,D0
MOVE.L D0,290(A2)
1$: TST.L D5
bne L19 ;bne L21 ?
MOVEA.L 12(A2),A0
MOVE.L 8(A0),D1
MOVEA.L 4(A2),A6
CALL DupLock
MOVE.L D0,D6
MOVE.L D6,-24(A5)
MOVEA.L A3,A0
MOVE.L A0,-28(A5)
MOVE.L A0,746(A2)
bra L18
L17: MOVEA.L 746(A2),A0
MOVE.L 4(A0),D1
MOVE.L D6,D2
MOVEA.L 4(A2),A6
CALL SameLock
TST.L D0
bne 1$
BTST.B #3,24(A2)
bne 1$
LEA.L CircularDirTxt(pc),A1
MOVE.L A1,D1
CALL PutStr
bra L20
1$: MOVEA.L -32(A5),A2
MOVEA.L 746(A2),A0
MOVE.L (A0),746(A2)
L18: TST.L 746(A2)
bne L17
bra L19
L38: BTST.B #3,24(A2) ;ap_Flags+8
beq 1$
BCLR.B #3,24(A2) ;ap_Flags+8
MOVEQ #ERROR_NO_MORE_ENTRIES/2,D5
ADD.L D5,D5
bra L21
;dieser Einschub soll dafür sorgen, daß das Hidden-Flag respektiert wird:
1$: btst.b #7,147(a2) ;ap_Info+fib_Protection+3+8
bne L32
;Es geht im Moment darum, hier das richtige Sprungziel zu finden.
;* bei L21 wird das aktuelle Directory als abgearbeitet betrachtet.
;* bei L19 bleibt das Programm in irgendeiner Schleife hängen
; (vermutlich wird MatchNext übergangen)
;* L32 scheint zu stimmen ! (auch kurz mit OPT I/A getestet)
3$: MOVEA.L -32(A5),A2
BTST.B #4,22(A2) ;ap_FoundBreak+2+8
beq 2$
MOVE.L #ERROR_BREAK,D5
MOVEQ #64,D0
MOVE.L D0,290(A2)
bra L21
2$: MOVEA.L -32(A5),A2
BTST.B #1,293(A2)
beq L22
tst.l 32(A2) ;ap_Info+fib_DirEntryType+8
ble L22
MOVEA.L A2,A0
LEA.L 330(A0),A3
ADDA.W #36,A2
BTST.B #1,24(A0)
beq L23
TST.L D7
bne L23
MOVEA.L -32(A5),A1
MOVEA.L 12(A1),A0 ;ap_Last+8
MOVE.L 8(A0),D1
MOVE.L A3,D2
MOVEQ #64,D3
ADD.L D3,D3
MOVEA.L 4(A1),A6
CALL NameFromLock
MOVE.L D2,D1
MOVE.L A2,D2
CALL AddPart
bra L24
L23: MOVEQ #64,D0
ADD.L D0,D0
MOVEA.L A3,A0
MOVEA.L A2,A1
bsr strncpy
L24: MOVEA.L -32(A5),A2
MOVE.L D7,D0
ADDQ.L #1,D0
MOVE.L D0,D1
LSL.L #2,D1
ADD.L D0,D1
MOVE.L D1,714(A2)
MOVE.L A3,718(A2)
MOVEQ #ST_LINKDIR,D0
CMP.L 32(A2),D0 ;ap_Info+fib_DirEntryType+8
bne 1$
LEA.L DirHlTxt(pc),A0
bra 3$
1$: LEA.L DirTxt(pc),A0
3$: MOVE.L A0,722(A2)
LEA.L 714(A2),A3
MOVE.L A3,-(sp)
MOVEA.L 326(A2),A0
LEA.L MetaFormat(pc),A1
bsr sprintf
ADDQ.W #4,A7
LEA.L SpcTxt(pc),A0
MOVE.L A0,714(A2)
BTST.B #3,293(A2)
beq L27
BSET.B #7,293(A2)
L29: MOVE.L 326(A2),D1
MOVE.L A3,D2
MOVEA.L 4(A2),A6
CALL VPrintf
LEA.L QMarkTxt(pc),A0
MOVE.L A0,D1
MOVEQ #0,D2
CALL VPrintf
MOVEQ #0,D0
MOVE.L D0,D1
MOVEA.L A2,A0
bsr Interact
L28: BTST.B #7,293(A2)
bne L29
BTST.B #4,293(A2)
beq 1$
BCLR.B #4,293(A2)
bra L21
1$: MOVEA.L -32(A5),A2
BTST.B #6,293(A2)
bne L20
MOVEQ #20,D0
CMP.L 298(A2),D0
bne L22
bra L20
L27: MOVE.L 326(A2),D1
MOVE.L A3,D2
MOVEA.L 4(A2),A6
CALL VPrintf
LEA.L LfTxt(pc),A0
MOVE.L A0,D1
CALL PutStr
L22: MOVEA.L -32(A5),A2
MOVEQ #33,D0
AND.L 290(A2),D0
beq L31
tst.l 32(A2) ;ap_Info+fib_DirEntryType+8
bmi L31
MOVE.L D7,D0
ADDQ.L #1,D0
MOVEA.L A2,A0
LEA.L -28(A5),A1
bsr DoDir
BCLR.B #3,24(A2) ;ap_Flags+8
BTST.B #6,293(A2)
bne L20
MOVEQ #20,D0
CMP.L 298(A2),D0
beq L20
L31: MOVEA.L -32(A5),A2
BTST.B #2,293(A2)
beq L32
tst.l 32(A2) ;ap_Info+fib_DirEntryType+8
bpl L32
MOVEQ #40,D0
MOVE.L #MEMF_CLEAR|MEMF_PUBLIC,D1
MOVEA.L (A2),A6
CALL AllocVec
MOVE.L D0,734(A2)
bne L33
MOVEA.L 4(A2),A6
CALL IoErr
MOVE.L D0,294(A2)
LEA.L IncompleteTxt(pc),A0
MOVE.L A0,D1
MOVEA.L 4(A2),A6
CALL PutStr
bra L21
L33: MOVEA.L -32(A5),A2
MOVEA.L 734(A2),A0
ADDQ.L #8,A0
LEA.L 36(A2),A1
MOVEQ #32,D0
bsr strncpy
MOVEA.L 734(A2),A0
MOVE.L 32(A2),4(A0)
LEA.L -20(A5),A0
MOVE.L A0,742(A2)
MOVE.L -20(A5),738(A2)
bra L34
L37: MOVEA.L 738(A2),A0
ADDQ.L #8,A0
MOVEA.L 734(A2),A1
ADDQ.L #8,A1
bsr stricmp
TST.L D0
ble 1$
MOVEA.L 734(A2),A0
MOVEA.L 742(A2),A1
MOVE.L (A1),(A0)
MOVEA.L 742(A2),A0
MOVE.L 734(A2),(A0)
bra L36
1$: MOVEA.L -32(A5),A2
MOVEA.L 738(A2),A0
MOVE.L A0,742(A2)
MOVE.L (A0),738(A2)
L34: TST.L 738(A2)
bne L37
L36: TST.L 738(A2)
bne L32
MOVEA.L 742(A2),A0
MOVE.L 734(A2),(A0)
L32: LEA.L 8(A2),A0
MOVE.L A0,D1
MOVEA.L 4(A2),A6
CALL MatchNext
MOVE.L D0,D5
BTST.B #0,292(A2)
beq L19
MOVE.L D6,D1
CALL CurrentDir
MOVE.L D0,D4
LEA.L 330(A2),A0
MOVE.L A0,D1
CALL DeleteFile
TST.L D0
bne 1$
CALL IoErr
MOVE.L D0,D1
MOVEQ #0,D2
CALL PrintFault
bra 2$
1$: LEA.L DelTxt(pc),A0
MOVE.L A0,D1
CALL PutStr
2$: MOVE.L D4,D1
CALL CurrentDir
BCLR.B #0,292(A2)
L19: TST.L D5
beq L38
L21: CMPI.L #ERROR_BREAK,D5
bne 1$
MOVE.L d5,294(A2)
MOVEQ #5,D0
MOVE.L D0,298(A2)
MOVEQ #64,D0
MOVE.L D0,290(A2)
bra L20
1$: MOVEA.L -32(A5),A2
BTST.B #6,293(A2)
bne L20
MOVEA.L -32(A5),A2
MOVEQ #ERROR_NO_MORE_ENTRIES/2,D0
ADD.L D0,D0
CMP.L D0,D5
beq 2$
MOVEA.L 4(A2),A6
CALL IoErr
MOVE.L D0,294(A2)
2$: MOVEQ #0,D0
MOVE.L D0,298(A2)
MOVE.L -20(A5),734(A2)
MOVE.L D0,722(A2)
MOVEQ #1,D5
bra L39
L45: BTST.B #3,293(A2)
beq L40
MOVE.L D7,D0
LSL.L #2,D0
ADD.L D7,D0
ADDQ.L #2,D0
MOVE.L D0,714(A2)
MOVEA.L 734(A2),A3
LEA.L 8(A3),A0
MOVE.L A0,718(A2)
LEA.L L11(pc),A0
MOVE.L A0,722(A2)
MOVE.L 4(A3),D0
addq.l #4,d0
bne 3$
LEA.L HlTxt(pc),A0
MOVE.L A0,722(A2)
3$: MOVEQ #3,D0
CMP.L 4(A3),D0
bne 4$
LEA.L SlTxt(pc),A0
MOVE.L A0,722(A2)
4$: LEA.L 714(A2),A3
MOVE.L A3,-(sp)
MOVEA.L 326(A2),A0
LEA.L MetaFormat2(pc),A1
bsr sprintf
LEA.L SpcTxt(pc),A0
MOVE.L A0,714(A2)
BSET.B #7,293(A2)
LEA.L 330(A2),A0
MOVEA.L 734(A2),A1
ADDQ.L #8,A1
MOVEQ #64,D0
ADD.L D0,D0
bsr strncpy
ADDQ.W #4,sp
bra L41
L42: MOVE.L 326(A2),D1
MOVE.L A3,D2
MOVEA.L 4(A2),A6
CALL VPrintf
LEA.L QMarkTxt(pc),A0
MOVE.L A0,D1
MOVEQ #0,D2
CALL VPrintf
MOVE.L D6,D0
MOVEQ #1,D1
MOVEA.L A2,A0
bsr Interact
L41: BTST.B #7,293(A2)
bne L42
BTST.B #4,293(A2)
beq 1$
BCLR.B #4,293(A2)
bra L20
1$: MOVEA.L -32(A5),A2
BTST.B #6,293(A2)
beq L43
bra L20
L40: MOVE.L #SIGBREAKF_CTRL_C,D1
MOVEA.L 4(A2),A6
CALL CheckSignal
TST.L D0
beq 1$
MOVEQ #64,D0
MOVE.L D0,290(A2)
MOVEQ #5,D0
MOVE.L D0,298(A2)
MOVE.L #ERROR_BREAK,294(A2)
bra L20
1$: MOVEA.L -32(A5),A2
MOVE.L D5,D0
MOVEQ #1,D1
AND.L D1,D0
ASL.L #7,D0
MOVEA.L A2,A0
ADDA.L D0,A0
LEA.L 458(A0),A3
MOVEA.L 734(A2),A0
ADDQ.L #8,A0
MOVEA.L A0,A1
MOVEQ #32,D0
MOVEA.L A3,A0
bsr strncpy
MOVEA.L 734(A2),A0
MOVEQ #-4,D0
CMP.L 4(A0),D0
bne 2$
MOVEA.L A3,A0
LEA.L HlTxt(pc),A1
bsr strcat
2$: MOVEA.L 734(A2),A0
MOVEQ #3,D0
CMP.L 4(A0),D0
bne 3$
MOVEA.L A3,A0
LEA.L SlTxt(pc),A1
bsr strcat
3$: MOVE.L D5,D0
ASL.L #2,D0
MOVE.L D0,D1
ADDI.L #714,D1
MOVE.L A3,0(A2,D1.L)
MOVEQ #3,D0
SUB.L D5,D0
MOVE.L D0,D5
MOVEQ #1,D0
CMP.L D0,D5
beq 4$
MOVEA.L 734(A2),A0
TST.L (A0)
bne L43
4$: MOVE.L D7,D0
LSL.L #2,D0
ADD.L D7,D0
ADDQ.L #2,D0
lea 714(a2),a0
move.l d0,(a0)
MOVE.L A0,-(sp)
MOVE.L A0,40(sp)
MOVEA.L 326(A2),A0
LEA.L MetaFormat3(pc),A1
bsr sprintf
ADDQ.W #4,sp
LEA.L SpcTxt(pc),A0
MOVE.L A0,714(A2)
MOVE.L 326(A2),D1
MOVE.L 36(sp),D2
MOVEA.L 4(A2),A6
CALL VPrintf
CLR.L 722(A2)
L43: MOVEA.L -32(A5),A2
MOVEA.L 734(A2),A0
MOVE.L (A0),734(A2)
L39: TST.L 734(A2)
beq L20
TST.L 298(A2)
beq L45
bra L20
L46: MOVEA.L -20(A5),A1
MOVE.L (A1),734(A2)
MOVEA.L (A2),A6
CALl FreeVec
MOVE.L 734(A2),-20(A5)
L20: TST.L -20(A5)
bne L46
TST.L D6
beq 1$
MOVE.L D6,D1
MOVEA.L 4(A2),A6
CALL UnLock
1$: MOVEM.L (sp)+,D2-D7/A2-A3/A6
UNLK A5
RTS
Interact:
LINK.W A5,#-36
MOVEM.L D2-D3/D6-D7/A2-A3/A6,-(sp)
MOVEA.L A0,A3
MOVE.L D0,D7
MOVE.L D1,D6
MOVEQ #0,D0
MOVE.L D0,298(A3)
BSET.B #7,293(A3)
MOVEQ #23,D0
MOVEQ #0,D1
LEA.L -28(A5),A0
1$: MOVE.B D1,(A0)+
dbf D0,1$
MOVEA.L 4(A3),A6
CALL Output
MOVE.L D0,D1
CALL Flush
MOVEQ #64,D0
ADD.L D0,D0
MOVE.L #MEMF_CLEAR|MEMF_PUBLIC,D1
MOVEA.L (A3),A6
CALL AllocVec
MOVE.L D0,28(sp)
bne L47
MOVEA.L 4(A3),A6
CALL IoErr
MOVE.L D0,294(A3)
LEA.L IncompleteTxt(pc),A0
MOVE.L A0,D1
MOVEA.L 4(A3),A6
CALL PutStr
MOVEQ #20,D0
MOVE.L D0,298(A3)
bra L48
L47: TST.L D6
bne 1$
LEA.L InteractionTemplate1(pc),A0
MOVE.L A0,D1
LEA.L -28(A5),A1
MOVE.L A1,D2
MOVEQ #0,D3
MOVEA.L 4(A3),A6
CALL ReadArgs
MOVEA.L D0,A2
bra 2$
1$: LEA.L InteractionTemplate2(pc),A0
MOVE.L A0,D1
LEA.L -28(A5),A1
MOVE.L A1,D2
MOVEQ #0,D3
MOVEA.L 4(A3),A6
CALL ReadArgs
MOVEA.L D0,A2
2$: MOVE.L A2,D0
bne 3$
CALL IoErr
MOVE.L D0,294(A3)
MOVEQ #20,D0
MOVE.L D0,298(A3)
bra L49
3$: TST.L -28(A5)
beq L50
MOVEQ #1,D0
CMP.L D0,D6
bne L50
MOVE.L D7,D1
CALL CurrentDir
MOVE.L D0,D6
LEA.L 330(A3),A0
MOVE.L A0,D1
MOVE.L #MODE_OLDFILE,D2
CALL Open
MOVE.L D0,D7
bne L51
CALL IoErr
MOVE.L D0,294(A3)
MOVEQ #20,D0
MOVE.L D0,298(A3)
bra L52
L54: move.l #SIGBREAKF_CTRL_C,D1
MOVEA.L 4(A3),A6
CALL CheckSignal
TST.L D0
beq 1$
MOVE.L #ERROR_BREAK,D1
MOVEQ #0,D2
CALL PrintFault
bra L53
1$: LEA.L -29(A5),A0
MOVE.L A0,D1
MOVEQ #1,D2
CALL WriteChars
L51: MOVE.L D7,D1
MOVEA.L 4(A3),A6
CALL FGetC
MOVE.B D0,-29(A5)
CMPI.B #$ff,D0
bne L54
L53: MOVE.L D7,D1
MOVEA.L 4(A3),A6
CALL Close
L52: MOVE.L D6,D1
MOVEA.L 4(A3),A6
CALL CurrentDir
bra L55
L50: TST.L -12(A5)
beq L56
MOVE.L -8(A5),D1
beq L57
MOVEQ #0,D2
MOVE.L D2,D3
MOVEA.L 4(A3),A6
CALL Execute
LEA.L LfTxt(pc),A0
MOVE.L A0,D1
CALL PutStr
bra L55
L57: LEA.L CmdQuest(pc),A0
MOVE.L A0,D1
MOVEA.L 4(A3),A6
CALL PutStr
CALL Output
MOVE.L D0,D1
CALL Flush
CALL Input
MOVE.L D0,D1
MOVE.L 28(sp),D2
MOVE.L #$0800,D3
CALL FGets
TST.L D0
beq L55
MOVE.L D2,D1
MOVEQ #0,D2
MOVE.L D2,D3
CALL Execute
LEA.L LfTxt(pc),A0
MOVE.L A0,D1
CALL PutStr
bra L55
L56: TST.L -8(A5)
beq 1$
LEA.L InvalidAnswerTxt(pc),A0
MOVE.L A0,D1
MOVEA.L 4(A3),A6
CALL PutStr
bra L55
1$: TST.L -16(A5)
beq 2$
MOVEQ #64,D0
MOVE.L D0,290(A3)
bra L58
2$: TST.L -24(A5)
beq 3$
BSET.B #3,24(A3)
BSET.B #4,293(A3)
bra L58
3$: TST.L -28(A5)
beq 4$
TST.L D6
bne 4$
BSET.B #5,293(A3)
bra L58
4$: TST.L -20(A5)
beq L58
MOVEQ #1,D0
CMP.L D0,D6
bne L59
MOVE.L D7,D1
MOVEA.L 4(A3),A6
CALL CurrentDir
MOVE.L D0,D6
LEA.L 330(A3),A0
MOVE.L A0,D1
CALL DeleteFile
TST.L D0
bne 5$
CALL IoErr
MOVE.L D0,294(A3)
MOVEQ #10,D0
MOVE.L D0,298(A3)
bra 6$
5$: LEA.L DelTxt(pc),A0
MOVE.L A0,D1
CALL PutStr
6$: MOVE.L D6,D1
MOVEA.L 4(A3),A6
CALL CurrentDir
bra L58
L59: BSET.B #0,292(A3)
L58: BCLR.B #7,293(A3)
L55: MOVE.L A2,D1
MOVEA.L 4(A3),A6
CALL FreeArgs
L49: MOVEA.L 28(sp),A1
MOVEA.L (A3),A6
CALL FreeVec
L48: MOVEM.L (sp)+,D2-D3/D6-D7/A2-A3/A6
UNLK A5
RTS
putc: MOVE.B D0,(A3)+
RTS
sprintf:
MOVEM.L A2-A3/A6,-(sp)
MOVEA.L A0,A3
move.l a1,a0
move.l a3,-(sp)
move.l 20(sp),a1
LEA.L putc(pc),A2
MOVEA.L _AbsExecBase,A6
CALL RawDoFmt
move.l (sp)+,a3
MOVEA.L A3,A0
1$: TST.B (A0)+
bne 1$
SUBQ.L #1,A0
SUBA.L A3,A0
MOVE.L A0,D0
MOVEM.L (sp)+,A2-A3/A6
RTS
strncpy:
MOVE.L A0,D1
bra 1$
3$: MOVE.B (A1)+,(A0)+
beq 2$
1$: SUBQ.L #1,D0
bcc 3$
bra 4$
5$: CLR.B (A0)+
2$: SUBQ.L #1,D0
bcc 5$
4$: MOVE.L D1,D0
RTS
stricmp:
MOVEQ #0,D0
MOVEQ #0,D1
1$: MOVE.B (A0)+,D0
MOVE.B (A1)+,D1
CMPI.B #'a',D0
blt 2$
CMPI.B #'z',D0
bgt 2$
SUBI.B #32,D0
2$: CMPI.B #'a',D1
blt 3$
CMPI.B #'z',D1
bgt 3$
SUBI.B #32,D1
3$: SUB.L D1,D0
bne 4$
TST.B D1
bne 1$
4$: RTS
strcat: move.l a0,d0
1$: TST.B (A0)+
bne 1$
SUBQ.L #1,A0
2$: MOVE.B (A1)+,(A0)+
bne 2$
RTS
L11: dc.w 0
Version: dc.b "$VER: dir 37.51 (7.7.93 by as)",10,13,0
DosName: dc.b "dos.library",0
Template: dc.b "DIR,OPT/K,ALL/S,DIRS/S,FILES/S,INTER/S",0
InteractionTemplate1:
dc.b "E=ENTER/S,B=BACK/S,DEL=DELETE/S,Q=QUIT/S,C=COM/S,COMMAND",0
InteractionTemplate2:
dc.b "T=TYPE/S,B=BACK/S,DEL=DELETE/S,Q=QUIT/S,C=COM/S,COMMAND",0
IgnoreOptTxt: dc.b " option ignored",10,0
NoInfoTxt: dc.b "Could not get information for %s",10,0
NoDirTxt: dc.b "%s is not a directory",10,0
CircularDirTxt: dc.b "Error, circular directory entry found",10,0
DirHlTxt: dc.b "(dir)"
HlTxt: dc.b " <hl>",0
SlTxt: dc.b " <sl>",0
DirTxt: dc.b "(dir)",0
IncompleteTxt: dc.b "List incomplete -"
SpcTxt: dc.b 32,0
DelTxt: dc.b "Deleted"
LfTxt: dc.b 10,0
MetaFormat: dc.b "%%%lds%%s %%s",0
MetaFormat2: dc.b "%%%lds%%s%%s",0
MetaFormat3: dc.b "%%%lds%%-31s %%s",10,0
CmdQuest: dc.b 10,"Command"
QMarkTxt: dc.b " ? ",0
InvalidAnswerTxt:
dc.b "Invalid response - try again",10,0
END